package com.saybiu.service;

import com.saybiu.domain.*;

import java.util.List;

/**
 * @Author: 李金祥
 * @Date: 2021/4/17 20:21 （日期和时间）
 */
public interface UserService {
    /**
     * 用户注册
     * @param user 用户注册信息
     * 事务处理
     * 影响bbs_users和bbs_usermeta表
     */
    void register(User user,UserMeta userMeta);

    /**
     * 用户登录
     * @param user
     * @param UserLatestIp 用户最近登录ip
     * @return 返回用户登录token
     */
    Boolean login(User user, String UserLatestIp);

    /**
     * 修改用户属性信息根据用户id
     * @param userMeta 用户属性对象
     */
    void updateUserMeta(UserMeta userMeta);

    /**
     * 修改用户手机号根据user中的id
     * @param user user对象
     */
    void updatePhoneOrPassword(User user);

    /**
     * 关注他人
     * @param userId 用户id
     * @param beSupportedUserId 被关注人的id
     * 做事务处理
     * 影响bbs_userMeta和bbs_supports表
     */
    void addUserSupportAndUserBeSupported(Integer userId, Integer beSupportedUserId);

    /**
     * 取消关注
     * @param userId 用户id
     * @param beSupportUserId 被关注人id
     * 做事务处理
     * 影响bbs_userMeta和bbs_supports表
     */
    void deleteUserSupportAndUserBeSupported(Integer userId, Integer beSupportUserId);

    //------------------对用户信息的查询操作-------------------------------

//    /**
//     * 查询关注人
//     * @param userId
//     * @param beSupportUserId
//     * @return support对象
//     */
//    UserMeta querySupportRelation(Integer userId, Integer beSupportUserId);

    /**
     * 查询用户信息
     * @param userId 用户id
     * @return 用户信息
     */
    User queryUser(Integer userId);

    /**
     * 查询用户属性信息
     * @param userId 用户id
     * @return 返回该用户的属性实体
     * 操作bbs_usermeta表
     */
    UserMeta queryUserMeta(Integer userId);

    /**
     * 查询用户关注人和粉丝
     * @param userId 用户id
     * @param beSupportedUserId 被关注人id
     * @return
     * 操作bbs_supports表
     */
    List<Support> queryUserSupportAndBeSupported(Integer userId, Integer beSupportedUserId);

    /**
     * 查询用户收藏信息
     * @param userId 用户id
     * @return 返回该用户收藏信息实体
     * 操作bbs_collections表
     */
    List<Collection> queryUserCollection(Integer userId);

    /**
     * 查询用户点赞和被点赞
     * @param userId 用户id
     * @param beLikedUserId 被点赞人id
     * @return
     * 操作bbs_likes表
     */
    List<Like> queryUserLikeAndBeLiked(Integer userId, Integer beLikedUserId);
}